package be.kdg.bombermanunlimited.client.gui.game;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

import javax.swing.JPanel;

import be.kdg.bombermanunlimited.audio.gui.AudioControls;
import be.kdg.bombermanunlimited.client.CentralRegistry;
import be.kdg.bombermanunlimited.client.CentralRegistry.BombermanObjects;
import be.kdg.bombermanunlimited.client.Game.ClientGame;
import be.kdg.bombermanunlimited.client.gui.Board;
import be.kdg.bombermanunlimited.client.gui.chat.ChatPanel;
import be.kdg.bombermanunlimited.server.remote.interfaces.IGame;


/**
 * Dit is het game paneel, hierin staat de chat, de audio controls als het spel zelf
 * @author Philip
 *
 */
public class GamePanel extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4868376444510116036L;
	
	/* Wat we nodig hebben lijkt me logisch */
	private ChatPanel chat;
	private AudioControls audio;
	private Board board;
	// een proxy van het game object op de server
	private ClientGame game;

	public GamePanel() {
		// vraag het spel op op de server
		game = getGame();

		// maak chat aan
		chat = new ChatPanel();
		chat.setPreferredSize(new Dimension(chat.getPreferredSize().width, 100));

		// maak audio aan
		audio = new AudioControls();
		audio.setPreferredSize(null);
		board = game.getBoard();
		
		// voeg alles correct toe aan het panel
		setLayout(new BorderLayout());
		add(audio, BorderLayout.NORTH);
		add(board, BorderLayout.CENTER);
		add(chat, BorderLayout.SOUTH);
	}

	/**
	 * functie om het game object op te vragen bij de server
	 * @return
	 */
	private ClientGame getGame() {
		IGame game = null;
		CentralRegistry reg = CentralRegistry.getRegistry();
		try {
			game = (IGame) LocateRegistry.getRegistry(
					reg.getString(BombermanObjects.HOST_IP),
					reg.getInteger(BombermanObjects.HOST_PORT)).lookup("/Game");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}

		return new ClientGame(game);
	}
}
